-- KEYS[1] = 库存 key （例如 "stock:product_1001"）
-- KEYS[2] = 用户集合 key (防重)  （用来记录已经抢购过的用户，例如 "users:product_1001"）
-- ARGV[1] = 用户ID  当前要参与秒杀的用户）

local stockKey = KEYS[1]
local userSetKey = KEYS[2]
local userId = ARGV[1]

-- 获取当前库存
local stock = tonumber(redis.call('GET', stockKey))
if stock == nil then
    return -1 -- 库存不存在
elseif stock <= 0 then
    return 0 -- 库存不足
end

-- 判断用户是否已参与过秒杀
if redis.call('SISMEMBER', userSetKey, userId) == 1 then
    return -2 -- 用户已抢购
end

-- 扣减库存 + 添加用户到集合
redis.call('DECR', stockKey)
redis.call('SADD', userSetKey, userId)

-- 再次获取库存
stock = tonumber(redis.call('GET', stockKey))
if stock == 0 then
    -- 如果库存为 0，删除 key 或者设置一个短 TTL（例如 5 分钟）
    redis.call('EXPIRE', stockKey, 300)
    redis.call('EXPIRE', userSetKey, 300)
end

return 1 -- 成功
